OpenWrt中使用crontab -e 添加计划任务在Openwrt重启之后添加的项会被删除。
这个很让人纠结。于是grep找到了busybox包中的/etc/init.d/cron
脚本,在通用start函数中赫然有一行“rm -rf /etc/crontabs/root”,之后下面两行正是加载/etc/config/cron中的配置,将这三行删除保存,重启之后/etc/crontabs/root中内容果然不再莫名地消失了。
其实,OpenwWrt提供的/etc/config的机制很好,一是便于手动维护,二是有利于自动化处理。
/etc/init.d/cron
脚本的那三行,rm一行是为了不至于添加重复的cron项,但这样也导致了通过其它方式添加的cron项失效,而删除了那三行,/etc/config/cron配置文件将不再起作用。前面说了,配置文件有好的一面,但是crontab -e显然比配置文件清晰明了,权衡之下,还是舍弃了配置文件。
附:更改后的/etc/init.d/cron
文件。
这个问题只在某些特定的OpenWrt版本中存在。
以下contab的使用,来自http://www.centos.bz/2011/03/auto-run-task-crontab/
crontab用法
crontab的格式如下面:
f1 f2 f3 f4 f5 program
分 时 日 月 周 执行的命令
其中f1 表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行程式的路径。
- 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程式,其余类推
- 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推
- 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推
- 当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其余类推
管理员登录SSH,输入命令crontab -e编辑crontab文件,根据上面的格式输入并保存。
crontab例子
每月每天每小时的第 0 分钟执行一次 /bin/ls :
0 * * * * /bin/ls
在 12 月内, 每天的早上 6 点到 12 点中,每隔 20 分钟执行一次 /usr/bin/backup :
\*/20 6-12 * 12 * /usr/bin/backup
周一到周五每天下午 5:00 寄一封信给 [email protected] :
0 17 * * 1-5 mail -s "hi" [email protected] </tmp/maildata
每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分….执行 echo “haha”
20 0-23/2 * * * echo "haha"
晚上11点到早上8点之间每两个小时,早上8点
0 23-7/2,8 * * * date